﻿Imports Newtonsoft.Json

''' <summary>
''' 对话返回的响应体
''' </summary>
Public Class ChatResponse

    ''' <summary>
    ''' 该对话的唯一标识符
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("id")>
    Public Property Id As String

    ''' <summary>
    ''' 模型生成的 completion 的选择列表
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("choices")>
    Public Property Choices As List(Of ChoicesType)

    ''' <summary>
    ''' 创建聊天完成时的 Unix 时间戳（以秒为单位）。
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("created")>
    Public Property Created As Integer

    ''' <summary>
    ''' 生成该 completion 的模型名。
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("model")>
    Public Property Model As String

    ''' <summary>
    ''' This fingerprint represents the backend configuration that the model runs with.
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("system_fingerprint")>
    Public Property SystemFingerprint As String

    ''' <summary>
    ''' 对象的类型, 其值为 chat.completion。
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("object")>
    Public Property [Object] As String

    ''' <summary>
    ''' 该对话补全请求的用量信息。
    ''' </summary>
    ''' <returns></returns>
    <JsonProperty("usage")>
    Public Property Usage As UsageType

    ''' <summary>
    ''' 模型生成的 completion 的选择列表
    ''' </summary>
    Public Class ChoicesType

        ''' <summary>
        ''' 模型停止生成 token 的原因。
        ''' Stop ： 模型自然停止生成，或遇到 stop 序列中列出的字符串。
        ''' length：输出长度达到了模型上下文长度限制，或达到了 max_tokens 的限制。
        ''' content_filter：输出内容因触发过滤策略而被过滤。
        ''' insufficient_system_resource：系统推理资源不足，生成被打断。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("finish_reason")>
        Public Property FinishReason As String

        ''' <summary>
        ''' 该 completion 在模型生成的 completion 的选择列表中的索引。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("index")>
        Public Property Index As Integer

        ''' <summary>
        ''' (非流式)模型生成的 completion 消息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("message")>
        Public Property Message As MessageType

        ''' <summary>
        ''' (流式)模型生成的 completion 消息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("delta")>
        Public Property Delta As MessageType

        ''' <summary>
        ''' 该 choice 的对数概率信息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("logprobs")>
        Public Property Logprobs As LogprobsType
    End Class

    ''' <summary>
    ''' 该 choice 的对数概率信息。
    ''' </summary>
    Public Class LogprobsType
        ''' <summary>
        ''' 一个包含输出 token 对数概率信息的列表。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("content")>
        Public Property Content As List(Of ContentType)
    End Class

    ''' <summary>
    ''' 概率信息的列表。
    ''' </summary>
    Public Class ContentType
        ''' <summary>
        ''' 输出的 token。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("token")>
        Public Property Token As String

        ''' <summary>
        ''' 该 token 的对数概率。-9999.0 代表该 token 的输出概率极小，不在 top 20 最可能输出的 token 中。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("logprob")>
        Public Property Logprob As Double

        ''' <summary>
        ''' 一个包含该 token UTF-8 字节表示的整数列表。一般在一个 UTF-8 字符被拆分成多个 token 来表示时有用。如果 token 没有对应的字节表示，则该值为 null。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("bytes")>
        Public Property Bytes As Integer()


        ''' <summary>
        ''' 一个包含在该输出位置上，输出概率 top N 的 token 的列表，以及它们的对数概率。在罕见情况下，返回的 token 数量可能少于请求参数中指定的 top_logprobs 值。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("top_logprobs")>
        Public Property TopLogprobs As List(Of TopLogprobsType)
    End Class

    ''' <summary>
    ''' 输出概率 top N 的 token 的列表
    ''' </summary>
    Public Class TopLogprobsType
        ''' <summary>
        ''' 输出的 token。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("token")>
        Public Property Token As String

        ''' <summary>
        ''' 该 token 的对数概率。-9999.0 代表该 token 的输出概率极小，不在 top 20 最可能输出的 token 中。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("logprob")>
        Public Property Logprob As Double

        ''' <summary>
        ''' 一个包含该 token UTF-8 字节表示的整数列表。一般在一个 UTF-8 字符被拆分成多个 token 来表示时有用。如果 token 没有对应的字节表示，则该值为 null。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("bytes")>
        Public Property Bytes As Integer()
    End Class

    ''' <summary>
    ''' 模型生成的 completion 消息
    ''' </summary>
    Public Class MessageType

        ''' <summary>
        ''' 该 completion 的内容
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("content")>
        Public Property Content As String

        ''' <summary>
        ''' 仅适用于 deepseek-reasoner 模型。内容为 assistant 消息中在最终答案之前的推理内容。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("reasoning_content")>
        Public Property ReasoningContent As String

        ''' <summary>
        ''' 生成这条消息的角色。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("role")>
        Public Property Role As String
    End Class

    ''' <summary>
    ''' 该对话补全请求的用量信息
    ''' </summary>
    Public Class UsageType

        ''' <summary>
        ''' 模型 completion 产生的 token 数。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("completion_tokens")>
        Public Property CompletionTokens As Integer

        ''' <summary>
        ''' 用户 prompt 所包含的 token 数。该值等于 prompt_cache_hit_tokens + prompt_cache_miss_tokens
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("prompt_tokens")>
        Public Property PromptTokens As Integer

        ''' <summary>
        ''' 用户 prompt 中，命中上下文缓存的 token 数。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("prompt_cache_hit_tokens")>
        Public Property PromptCacheHitTokens As Integer

        ''' <summary>
        ''' 用户 prompt 中，未命中上下文缓存的 token 数。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("prompt_cache_miss_tokens")>
        Public Property PromptCacheMissTokens As Integer

        ''' <summary>
        ''' 该请求中，所有 token 的数量（prompt + completion）。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("total_tokens")>
        Public Property TotalTokens As Integer

        ''' <summary>
        ''' completion tokens 的详细信息。
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("completion_tokens_details")>
        Public Property CompletionTokensDetails As CompletionTokensDetailsType
    End Class

    ''' <summary>
    ''' completion tokens 的详细信息。
    ''' </summary>
    Public Class CompletionTokensDetailsType

        ''' <summary>
        ''' 推理模型所产生的思维链 token 数量
        ''' </summary>
        ''' <returns></returns>
        <JsonProperty("reasoning_tokens")>
        Public Property ReasoningTokens As Integer
    End Class

End Class
